package olga.gorbatiuk.perdep.logger.util;

/**
 *
 * @author Olga Gorbatiuk
 */
public abstract class StringUtils {

    /**
     * Check whether the given String has actual text. More specifically,
     * returns true if the string not null, its length is greater than 0, and it
     * contains at least one non-whitespace character.
     *
     * @param str the String to check (may be null)
     * @return true if the String is not null, its length is greater than 0, and
     * it does not contain whitespace only
     * @see hasText(java.lang.CharSequence)
     */
    public static boolean hasText(String str) {
        return hasText((CharSequence) str);
    }

    /**
     * Check whether the given CharSequence has actual text. More specifically,
     * returns true if the string not null, its length is greater than 0, and it
     * contains at least one non-whitespace character. 
     * StringUtils.hasText(null) = false 
     * StringUtils.hasText("") = false 
     * StringUtils.hasText(" ") = false
     * StringUtils.hasText("12345") = true 
     * StringUtils.hasText(" 12345 ") = true
     *
     * @param str the CharSequence to check (may be null)
     * @return true if the CharSequence is not null, its length is greater than
     * 0, and it does not contain whitespace only
     * @see java.lang.Character.isWhitespace(char)
     */
    public static boolean hasText(CharSequence str) {

        if (!hasLength(str)) {
            return false;
        }
        int strLen = str.length();
        for (int i = 0; i < strLen; i++) {
            if (!Character.isWhitespace(str.charAt(i))) {
                return true;
            }
        }
        return false;
    }

    /**
     * Check that the given String is neither null nor of length 0. Note: Will
     * return true for a String that purely consists of whitespace.
     *
     * @param str the String to check (may be null)
     * @return true if the String is not null and has length
     */
    public static boolean hasLength(String str) {
        return hasLength((CharSequence) str);
    }

    /**
     * Check that the given CharSequence is neither null nor of length 0. Note:
     * Will return true for a CharSequence that purely consists of whitespace.
     * StringUtils.hasLength(null) = false StringUtils.hasLength("") = false
     * StringUtils.hasLength(" ") = true StringUtils.hasLength("Hello") = true
     *
     * @param str the CharSequence to check (may be null)
     * @return true if the CharSequence is not null and has length
     */
    public static boolean hasLength(CharSequence str) {
        return (str != null && str.length() > 0);
    }
}
